<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <!-- 
    instanceof
    判断一个实例是否是一个类型的实例（该类型可以是父类型也可以是祖先类型）
    例如：
    function Person() {

    }
    const p = new Person()
    consolo.log(p instanceof Person) //true
    function Father() {

      }
      Father.prototype = new Person()
      const p = new Father();
      console.log(p instanceof Person); //true
   -->
    <script>
      function Mytest(target, origin) {
        // instanceof 只能判断引用类型
        //  如果是基础类型 返回false
        let conr = origin.prototype
        let t = target
        while(t) {
          if(t === conr) return true
          t = t.__proto__
        }
        return false
      }
      // 其实 instanceof 主要的实现原理就是只要右边变量的 prototype 在左边变量的原型链上即可?
      // instanceof 在查找的过程中会遍历左边变量的原型链，直到找到右边变量的 prototype，如果查找失败
      function myInstanceof(target, origin) {
        if (target === null || (typeof target !== "object" && typeof target !== "function")) return false;
        let Cprototype = origin.prototype;
        let proto = target;
        while(proto) { 
          if(proto === Cprototype) return true
          proto = Object.getPrototypeOf(proto)
        }
        return false
      }
      let arr = 2
      function Person() {}
      const p = new Person();
      console.log(p instanceof Object);
      console.log(myInstanceof(arr, Object));
      
    </script>
  </body>
</html>
